﻿String.prototype.getLen=function(){
	return this.length;
};
String.prototype.cutStr=function(p_intLength,p_strSuffix){
	if(this.getLen()<=p_intLength){
		return this;
	}
	p_strSuffix=p_strSuffix||'...';
	var intLength=p_intLength-p_strSuffix.getLen();
	return this.substr(0,intLength)+p_strSuffix;
};
String.prototype.Trim=function(){
	return this.replace(/(^\s*)|(\s*$)/g,'');
};
String.prototype.chkLen=function(p_intMinLen,p_intMaxLen){
	p_intMinLen=p_intMinLen||1;
	p_intMaxLen=p_intMaxLen||999;
	var intLength=this.getLen(this);
	if(intLength>p_intMaxLen||intLength<p_intMinLen){
		return false;
	}else{
		return true;
	}
};
String.prototype.chkType=function(p_strType){
	switch(p_strType){
		case 'int':
			return (/^-?[1-9][0-9]+$|^-?[0-9]$/).test(this);
		case 'url':
			return (/^https?:\/\/([a-z0-9-]+\.)+[a-z0-9]{2,4}.*$/).test(this);
		case 'email':
			return (/^[a-z0-9_+.-]+\@([a-z0-9-]+\.)+[a-z0-9]{2,4}$/i).test(this);
		case 'idcard':
			return (/^[0-9]{15}$|^[0-9]{17}[a-zA-Z0-9]/).test(this);
		case 'money':
			return (/^\d+(\.\d{1,2})?$/).test(this);
		case 'year':
			return (/^(19|20)\d\d$/).test(this);
	}
	return false;
};
Array.prototype.unique=function(){
	var hash={};
	for( var i=0,j=0;i<this.length;i++){
		if(this[i]!==undefined){
			if(!hash[this[i]]){
				this[j++]=this[i];
				hash[this[i]]=true;
			}
		}
	}
	this.length=j;
	return this;
};
Array.prototype.clone=function(){
	var arrTmp=[];
	for( var strKey in this){
		if(arrTmp[strKey]===undefined&&typeof this[strKey]=='string'){
			arrTmp[strKey]=this[strKey];
		}
	}
	return arrTmp;
};
Array.prototype.insertAt=function(p_intIndex,p_mixValue){
	var arrPart1=this.slice(0,p_intIndex);
	var arrPart2=this.slice(p_intIndex);
	arrPart1.push(p_mixValue);
	return(arrPart1.concat(arrPart2));
};
Function.prototype.extend=function(p_objParent){
	if(p_objParent instanceof Function){
		this._objParent=p_objParent;
		for( var prop in p_objParent.prototype){
			if(this.prototype[prop]===undefined){
				this.prototype[prop]=p_objParent.prototype[prop];
			}
		}
	}
	return this;
};

(function(){
	var undefined;
	var window=this,Base=window.Base=function(){
		/* 私有变量 */
		this._arrPrivate=[];
		this._arrPrivate['strUserAgent']=navigator.userAgent.toLowerCase();
		/* 浏览器变量 */
		this.browser={
			version:(this._arrPrivate['strUserAgent'].match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],
			safari:/webkit/.test(this._arrPrivate['strUserAgent']),
			opera:/opera/.test(this._arrPrivate['strUserAgent']),
			msie:/msie/.test(this._arrPrivate['strUserAgent'])&&!/opera/.test(this._arrPrivate['strUserAgent']),
			mozilla:/mozilla/.test(this._arrPrivate['strUserAgent'])&&!/(compatible|webkit)/.test(this._arrPrivate['strUserAgent'])
		};
		/* get字符串中的参数 */
		this._arrPrivate['arrGetParams']=[];
		/* cookie */
		this._arrPrivate['arrCookies']=[];
	},
	// 公用属性和方法
	pt=Base.prototype;
	/* 是否有声明该变量 */
	pt.isSet=function(p_strValName){
		if(typeof (p_strValName)=='undefined'||p_strValName===null){
			return false;
		}else{
			return true;
		}
	},
	/* 获取get字符串中的参数 */
	pt.getParam=function(p_strName){
		if(0==this._arrPrivate['arrGetParams'].length){
			var arrParamStr=document.location.search.substr(1).split('&');
			var arrParam=[];
			for( var i=0;i<arrParamStr.length;++i){
				arrParam=arrParamStr[i].split('=');
				this._arrPrivate['arrGetParams'][arrParam[0]]=arrParam[1];
			}
		}
		return this.isSet(this._arrPrivate['arrGetParams'][p_strName])?this._arrPrivate['arrGetParams'][p_strName]:null;
	};
	/* 写Cookie */
	pt.setCookie=function(p_strName,p_mixValue,p_intExpire,p_strPath,p_strDomain,p_bolSecure){
		var objNow=new Date();
		var objOverDue=new Date(objNow.getTime()+p_intExpire*1000);
		document.cookie=p_strName+'='+escape(p_mixValue)+((p_intExpire)?';expires='+objOverDue.toGMTString():'')+((p_strPath)?';path='+p_strPath:'')+((p_strDomain)?';domain='+p_strDomain:'')
				+((p_bolSecure)?';secure':'');
	};
	/* 读Cookie */
	pt.getCookie=function(p_strName){
		if(0==this._arrPrivate['arrCookies'].length){
			var arrAllCookieStr=document.cookie.split(';');
			var arrCookie=[];
			for( var i=0;i<arrAllCookieStr.length;++i){
				arrCookie=arrAllCookieStr[i].split('=');
				if(arrCookie.length>1){
					this._arrPrivate['arrCookies'][arrCookie[0].Trim()]=arrCookie[1].Trim();
				}
			}
		}
		return this.isSet(this._arrPrivate['arrCookies'][p_strName])?this._arrPrivate['arrCookies'][p_strName]:null;
	};
	/* 删除Cookie */
	pt.delCookie=function(p_strName){
		this.setCookie(p_strName,'',-1);
	};
	/* 根据id name index获取DOM对象 */
	pt.$=function(p_mixSelector,p_objContext){
		if(typeof (p_mixSelector)=='string'){
			var strSelectorType=p_mixSelector.substr(0,1),strSelectorValue=p_mixSelector.substr(1);
			if('.'==strSelectorType){
				if(p_objContext&&p_objContext.nodeType){
					return p_objContext.getElementsByName(strSelectorValue);
				}else{
					return document.getElementsByName(strSelectorValue);
				}
			}else if('<'==strSelectorType){
				if(p_objContext&&p_objContext.nodeType){
					return p_objContext.getElementsByTagName(strSelectorValue.substr(0,strSelectorValue.length-1));
				}else{
					return document.getElementsByTagName(strSelectorValue.substr(0,strSelectorValue.length-1));
				}
			}else if('#'==strSelectorType){
				return document.getElementById(strSelectorValue);
			}else{
				return document.getElementById(p_mixSelector);
			}
		}
		return p_mixSelector&&p_mixSelector.nodeType?p_mixSelector:null;
	};
	/* 判断属否含有该属性 */
	pt.hasAttribute=function(p_objEle,p_strName){
		return p_objEle.getAttribute(p_strName)!==null;
	};
	/* 获取自定义属性 */
	pt.getAttribute=function(p_objEle,p_strName){
		if(this.hasAttribute(p_objEle,p_strName)){
			return p_objEle.getAttribute(p_strName);
		}else{
			return null;
		}
	};
	/* 设置自定义属性 */
	pt.setAttribute=function(p_objEle,p_strName,p_strValue){
		p_objEle.setAttribute(p_strName,p_strValue);
	};
	/* 判断对象是否是某种对象 */
	pt.isA=function(p_mixObject,p_objParent){
		return p_mixObject.constructor==p_objParent;
	};
	/* 通过闭包传参返回函数 */
	pt.getFunc=function(p_objThis,p_objFunc,p_mixArgs){
		return function(){
			var arrFuncArgs=[];
			if(null!=p_mixArgs){
				p_mixArgs=p_mixArgs instanceof Array?p_mixArgs:[p_mixArgs];
				for( var i=0;i<p_mixArgs.length;++i){
					arrFuncArgs.push(p_mixArgs[i]);
				}
			}
			var intArgLength=arguments.length;
			for(var i=0;i<intArgLength;++i){
				arrFuncArgs.push(arguments[i]);
			}
			p_objFunc.apply(p_objThis,arrFuncArgs);
		};
	};
	/* 得到JSON的长度 */
	pt.getJSONLength=function(p_jsnJSON){
		var intLength=0;
		for( var i in p_jsnJSON){
			++intLength;
		}
		return intLength;
	};
	/* 生成数组 */
	pt.makeArray=function(){
		var arrTmp=[];
		for( var i=0;i<arguments.length;++i){
			arrTmp.push(arguments[i]);
		}
		return arrTmp;
	};
	/* 得到复选框的值 */
	pt.getChkboxesValue=function(p_strObjName,p_bolNeedStr){
		var arrObjects=document.getElementsByName(p_strObjName);
		p_bolNeedStr=p_bolNeedStr?false:true;
		if(null===arrObjects){
			return null;
		}else{
			var arrVals=[];
			for( var i=0;i<arrObjects.length;++i){
				if(true===arrObjects[i].checked){
					arrVals.push(arrObjects[i].value);
				}
			}
			if(p_bolNeedStr){
				return arrVals.join(',');
			}else{
				return arrVals;
			}
		}
	};
	/* 得到单选框的值 */
	pt.getRadValue=function(p_strObjName){
		var arrObjects=document.getElementsByName(p_strObjName);
		for( var i=0;i<arrObjects.length;++i){
			if(arrObjects[i].checked){
				return arrObjects[i].value;
			}
		}
		return null;
	};
	/* 指定对象属性 */
	pt.setProps=function(p_objEle,p_jsnProps){
		p_jsnProps=p_jsnProps instanceof Object?p_jsnProps:{};
		for( var jsnProp in p_jsnProps){
			try{
				if('style'==jsnProp){
					for( var jsnSubProp in p_jsnProps[jsnProp]){
						p_objEle[jsnProp][jsnSubProp]=p_jsnProps[jsnProp][jsnSubProp];
					}
				}else{
					p_objEle[jsnProp]=p_jsnProps[jsnProp];
				}
			}catch(e){
			}
		}
	};
	/* 自动截取一定长度字符 */
	pt.showAutoAdaptText=function(p_strValue,p_intWidth,p_strSuffix,p_intPixelWidth){
		p_intPixelWidth=p_intPixelWidth||14/95;
		return p_strValue.cutStr(Math.floor(p_intWidth*p_intPixelWidth),p_strSuffix);
	};
	/* 翻译数据字典 */
	pt.getDictData=function(p_strKey,p_mixData){
		for( var strKey in p_mixData){
			if(p_strKey==strKey){
				return p_mixData[p_strKey];
			}
		}
		return '';
	};
	/* 获取对象的样式属性 start */
	// 获取对象样式属性
	pt.getStyle=function(p_objEle,p_strName){
		if(p_objEle.style[p_strName]){// 如果该属性存在于style[]中，则它最近被设置过(且就是当前的)
			return p_objEle.style[p_strName];
		}else if(p_objEle.currentStyle){// 否则，尝试IE的方式
			return p_objEle.currentStyle[p_strName];
		}else if(document.defaultView&&document.defaultView.getComputedStyle){// 或者W3C的方法，如果存在的话
			p_strName=p_strName.replace(/([A-Z])/g,"-$1");// 它使用传统的"text-Align"风格的规则书写方式，而不是"textAlign"
			p_strName=p_strName.toLowerCase();
			var s=document.defaultView.getComputedStyle(p_objEle,'');// 获取style对象并取得属性的值(如果存在的话)
			return s&&s.getPropertyValue(p_strName);
		}else{// 否则，就是在使用其它的浏览器
			return null;
		}
	};
	// 获取对象绝对位置
	pt.getPosX=function(p_objEle){
		return parseInt(this.getStyle(p_objEle,'left'),10);
	};
	pt.getPosY=function(p_objEle){
		return parseInt(this.getStyle(p_objEle,'top'),10);
	};
	// 获取对象相对于页面的位置
	pt.getPageX=function(p_objEle){
		return p_objEle.offsetParent?p_objEle.offsetLeft+this.getPageX(p_objEle.offsetParent):p_objEle.offsetLeft;
	};
	pt.getPageY=function(p_objEle){
		return p_objEle.offsetParent?p_objEle.offsetTop+this.getPageY(p_objEle.offsetParent):p_objEle.offsetTop;
	};
	// 获取对象相对于父对象的位置
	pt.getParentX=function(p_objEle){
		return p_objEle.parentNode==p_objEle.offsetParent?p_objEle.offsetLeft:this.getPageX(p_objEle)-this.getPageX(p_objEle.parentNode);
	};
	pt.getParentY=function(p_objEle){
		return p_objEle.parentNode==p_objEle.offsetParent?p_objEle.offsetTop:this.getPageY(p_objEle)-this.getPageY(p_objEle.parentNode);
	};
	// 设置对象绝对位置
	pt.setPosX=function(p_objEle,p_intPX){
		p_objEle.style.left=p_intPX+'px';
	};
	pt.setPosY=function(p_objEle,p_intPX){
		p_objEle.style.top=p_intPX+'px';
	};
	// 修改对象绝对位置
	pt.addPosX=function(p_objEle,p_intPX){
		this.setPosX(this.getPosX(p_objEle)+p_intPX);
	};
	pt.addPosY=function(p_objEle,p_intPX){
		this.setPosY(this.getPosY(p_objEle)+p_intPX);
	};
	// 得到对象的高度
	pt.getHeight=function(p_objEle){
		return parseInt(this.getStyle(p_objEle,'height'),10);
	};
	// 得到对象的宽度
	pt.getWidth=function(p_objEle){
		return parseInt(this.getStyle(p_objEle,'width'),10);
	};
	// 得到对象完整的、可能的完整高度
	pt.getFullHeight=function(p_objEle){
		if(this.getStyle(p_objEle,'display')!='none'){// 如果元素当前是显示的，那么offsetHeight应该可以成功，即使失败，getHeight也可以生效
			return p_objEle.offsetHeight||this.getHeight(p_objEle);
		}
		var jsnOldCSS=this.resetCSS(p_objEle,{
			display:'',
			visibility:'hidden',
			position:'absolute'
		});// 否则，我们必须处理display为'none'的元素，这时我们需要重置它的CSS属性以得到更精确的读数
		var intHeight=p_objEle.clientHeight||this.getHeight(p_objEle);// 计算元素的完整高度，如果clientHeight无效，则用getHeight()
		this.restoreCSS(p_objEle,jsnOldCSS);// 最后，我来来恢复元素本来的CSS属性
		return intHeight;// 并返回元素的完整高度
	};
	// 得到对象完整的、可能的完整宽度(不是实际的、当前的宽度)
	pt.getFullWidth=function(p_objEle){
		if(this.getStyle(p_objEle,'display')!='none'){// 如果元素当前是显示的，那么offsetWidth应该可以成功，即使失败，getWidth也可以生效
			return p_objEle.offsetWidth||this.getWidth(p_objEle);
		}
		var jsnOldCSS=this.resetCSS(p_objEle,{
			display:'',
			visibility:'hidden',
			position:'absolute'
		});// 否则，我们必须处理display为'none'的元素，这时我们需要重置它的CSS属性以得到更精确的读数
		var intWidth=p_objEle.clientWidth||this.getWidth(p_objEle);// 计算元素的完整宽度，如果clientWidth无效，则用getWidth()
		this.restoreCSS(p_objEle,jsnOldCSS);// 最后，我来来恢复元素本来的CSS属性
		return intWidth;// 并返回元素的完整宽度
	};
	// 用来设置一系列的CSS属性的一个函数，这些属性稍后可以恢复
	pt.resetCSS=function(p_objEle,p_jsnProp){
		var jsnOldCSS={};// 遍历每一个属性
		for( var i in p_jsnProp){
			jsnOldCSS[i]=p_objEle.style[i];// 记录原来的属性
			p_objEle.style[i]=p_jsnProp[i];// 并设置新的值
		}
		return jsnOldCSS;// 返回改变的值的集合，以备restoreCSS使用
	};
	// 恢复resetCSS函数引用的副作用的函数
	pt.restoreCSS=function(p_objEle,p_jsnProp){
		for( var i in p_jsnProp){// 将所有的属性重新设置为它们原来的值
			p_objEle.style[i]=p_jsnProp[i];
		}
	};
	// 设置元素的透明度级别(level是0-100的数字)
	pt.setOpacity=function(p_objEle,p_intLevel){
		if(this.browser.msie){// 如果滤镜存在，这是IE，于是设置Alpha滤镜
			p_objEle.style.filter='alpha(opacity='+p_intLevel+')';
		}else{// 否则，使用W3C的opacity属性
			p_objEle.style.opacity=p_intLevel/100;
		}
	};
	// 隐藏元素
	pt.hideEle=function(p_objEle){
		var p_strCurDisplay=this.getStyle(p_objEle,'display');
		if('none'!=p_strCurDisplay){
			p_objEle.olddisplay=p_strCurDisplay;
		}
		p_objEle.style.display='none';
	};
	// 显示元素
	pt.showEle=function(p_objEle){
		p_objEle.style.display=p_objEle.olddisplay||'';
	};
	/* 获取对象的样式属性 end */
	/* 元素相关位置长度获取 start */
	// 取得鼠标对于整个页面的水平位置
	pt.getMousePageX=function(p_objEvt){
		p_objEvt=p_objEvt||window.event;// 获取事件对象
		return p_objEvt.pageX||p_objEvt.clientX+document.body.scrollLeft;// 先取非IE的位置，不成功则用IE的位置
	};
	// 取得鼠标对于整个页面的垂直位置
	pt.getMousePageY=function(p_objEvt){
		p_objEvt=p_objEvt||window.event;// 获取事件对象
		return p_objEvt.pageY||p_objEvt.clientY+document.body.scrollTop;// 先取非IE的位置，不成功则用IE的位置
	};
	// 取得鼠标相对于事件对象里e的目标元素(target)的x坐标
	pt.getMouseElementX=function(p_objEvt){
		return (p_objEvt&&p_objEvt.layerX)||window.event.offsetX;// 取合适的元素偏移
	};
	// 取得鼠标相对于事件对象里e的目标元素(target)的x坐标
	pt.getMouseElementY=function(p_objEvt){
		return (p_objEvt&&p_objEvt.layerY)||window.event.offsetY;// 取合适的元素偏移
	};
	// 返回网页全文的高度(如果新的内容被加入，这一值可能会改变)
	pt.getBodyHeight=function(){
		return document.body.scrollHeight;
	};
	// 返回网页全文的宽度
	pt.getBodyWidth=function(){
		return document.body.scrollWidth;
	};
	// 用来检测浏览器在水平方向滚动了多少的函数
	pt.getScrollX=function(){
		var de=document.documentElement;// ie6 strict模式里的快捷方式
		// 如果浏览器的pageXOffset可用，则使用之
		return window.pageXOffset||
		// 否则，尝试取得根节点的水平滚动量
		(de&&de.scrollLeft)||
		// 最后，尝试取得body元素的水平滚动量
		document.body.scrollLeft;
	};
	// 用来检测浏览器在垂直方向滚动了多少的函数
	pt.getScrollY=function(){
		var de=document.documentElement;// ie6 strict模式里的快捷方式
		// 如果浏览器的pageYOffset可用，则使用之
		return window.pageYOffset||
		// 否则，尝试取得根节点的垂直滚动量
		(de&&de.scrollTop)||
		// 最后，尝试取得body元素的垂直滚动量
		document.body.scrollTop;
	};
	// 取得视口高度,包含横滚动条
	pt.getWindowHeight=function(){
		var de=document.documentElement;// ie6 strict模式里的快捷方式
		// 如果浏览器的innerHeight可用，则使用它
		return window.innerHeight||
		// 否则，尝试获得根节点的高度
		(de&&de.clientHeight)||
		// 最后，尝试获得body元素的高度
		document.body.clientHeight;
	};
	// 取得视口高度，包含竖滚动条
	pt.getWindowWidth=function(){
		var de=document.documentElement;// ie6 strict模式里的快捷方式
		// 如果浏览器的innerWidth可用，则使用它
		return window.innerWidth||
		// 否则，尝试获得根节点的宽度
		(de&&de.clientWidth)||
		// 最后，尝试获得body元素的宽度
		document.body.clientWidth;
	};
	/* 元素相关位置长度获取 end */
	/* 元素节点查找方法 start */
	// 前一个元素
	pt.prevNode=function(p_objEle){
		do{
			p_objEle=p_objEle.previousSibling;
		}while(p_objEle&&p_objEle.nodeType!=1);
		return p_objEle;
	};
	// 后一个元素
	pt.nextNode=function(p_objEle){
		do{
			p_objEle=p_objEle.nextSibling;
		}while(p_objEle&&p_objEle.nodeType!=1);
		return p_objEle;
	};
	// 第一个元素
	pt.firstNode=function(p_objEle){
		p_objEle=p_objEle.firstChild;
		return p_objEle&&p_objEle.nodeType!=1?this.nextNode(p_objEle):p_objEle;
	};
	// 最后一个元素
	pt.lastNode=function(p_objEle){
		p_objEle=p_objEle.lastChild;
		return p_objEle&&p_objEle.nodeType!=1?this.prevNode(p_objEle):p_objEle;
	};
	// 返回第几层父节点
	pt.papaNode=function(p_objEle,p_intNum){
		p_intNum=p_intNum||1;
		for( var i=0;i<p_intNum;++i){
			if(p_objEle!==null){
				p_objEle=p_objEle.parentNode;
			}
		}
		return p_objEle;
	};
	/* 节点查找方法 end */
	/* 对象操作函数 start */
	/* 转换一个Dom节点/HTML字符串混合型参数数组为纯粹的Dom节点数组 */
	pt.checkEle=function(p_mixValue){
		var arrTmp=[];
		if(p_mixValue.constructor!=Array){
			p_mixValue=[p_mixValue];
		}
		for( var i=0;i<p_mixValue.length;++i){
			if(p_mixValue[i].constructor==String){
				var div=document.createElement('div');
				div.innerHTML=p_mixValue[i];
				for( var j=0;j<div.childNodes.length;++j){
					arrTmp[arrTmp.length]=div.childNodes[j];
				}
			}else if(p_mixValue[i].length){
				for( var k=0;k<p_mixValue[i].length;++k){
					arrTmp[arrTmp.length]=p_mixValue[i][k];
				}
			}else{
				arrTmp[arrTmp.length]=p_mixValue[i];
			}
		}
		return arrTmp;
	};
	// 在父对象的某个子对象之前添加对象或者在某个对象之前添加对象
	pt.beforeEle=function(p_objParentEle,p_objBeforeEle,p_objCurrentEle){
		if(null==p_objCurrentEle){
			p_objCurrentEle=p_objBeforeEle;
			p_objBeforeEle=p_objParentEle;
			p_objParentEle=p_objBeforeEle.parentNode;
		}
		var eles=this.checkEle(p_objCurrentEle);
		for( var i=eles.length-1;i>=0;--i){
			p_objParentEle.insertBefore(eles[i],p_objBeforeEle);
		}
	};
	// 追加对象
	pt.appendEle=function(p_objParentEle,p_objCurrentEle){
		var eles=this.checkEle(p_objCurrentEle);
		for( var i=0;i<eles.length;++i){
			p_objParentEle.appendChild(eles[i]);
		}
	};
	// 移除某个对象
	pt.removeEle=function(p_objEle){
		if(p_objEle){
			p_objEle.parentNode.removeChild(p_objEle);
		}
	};
	// 清空对象
	pt.emptyEle=function(p_objEle){
		while(p_objEle.firstChild){
			p_objEle.removeChild(p_objEle.firstChild);
		}
	};
	/* 对象操作函数 end */
	/* 对象动画 start */
	// 高度变化
	pt.slideEle=function(p_objEle,p_intStart,p_intEnd,p_intTime,p_intFrame){
		p_objEle.style.height=p_intStart+'px';
		var intTotalAct=p_intTime*p_intFrame;
		for( var i=0;i<=intTotalAct;++i){
			(function(){
				var pos=i;
				setTimeout(function(){
					p_objEle.style.height=(pos*(p_intEnd-p_intStart)/(p_intTime*p_intFrame)+p_intStart)+'px';
				},pos*1000/p_intFrame);
			})();
		}
	};
	// 渐隐显示
	pt.fadeEle=function(p_objEle,p_intStart,p_intEnd,p_intTime,p_intFrame){
		this.setOpacity(p_objEle,p_intStart);
		var intTotalAct=p_intTime*p_intFrame;
		for( var i=0;i<=intTotalAct;++i){
			(function(thisobj){
				var opa=i;
				setTimeout(function(){
					thisobj.setOpacity(p_objEle,opa*(p_intEnd-p_intStart)/(p_intTime*p_intFrame)+p_intStart);
				},opa*1000/p_intFrame);
			})(this);
		}
	};
	// 宽度变化
	pt.widenEle=function(p_objEle,p_intStart,p_intEnd,p_intTime,p_intFrame){
		p_objEle.style.width=p_intStart+'px';
		var intTotalAct=p_intTime*p_intFrame;
		for( var i=0;i<=intTotalAct;++i){
			(function(){
				var pos=i;
				setTimeout(function(){
					p_objEle.style.width=(pos*(p_intEnd-p_intStart)/(p_intTime*p_intFrame)+p_intStart)+'px';
				},pos*1000/p_intFrame);
			})();
		}
	};
	// 滚动条滚动到指定位置
	pt.scrollToEle=function(p_objEle){
		window.scrollTo(0,this.getPageY(p_objEle));
	};
	// 拖放重排序，滑块输入
	// 拖动
	pt.startDrag=function(p_objEle,p_bolCrossBody){
		if(p_objEle&&p_objEle.nodeName){
			p_bolCrossBody=p_bolCrossBody?p_bolCrossBody:false;
			this._arrPrivate['dragobj']=p_objEle;
			this._arrPrivate['dragobj'].dragX=this._arrPrivate['dragobj'].dragY=0;
			this._arrPrivate['dragobj'].startDrag=false;
			this.bindEvent(p_objEle,'mousedown',this.getFunc(this,this.dragNodeMouseDown));
			this.bindEvent(document,'mousemove',this.getFunc(this,this.dragNodeMouseMove,p_bolCrossBody));
			this.bindEvent(document,'mouseup',this.getFunc(this,this.dragNodeMouseUp));
			p_objEle.style.cursor='move';
			p_objEle.onselectstart=function(){
				return false;
			};
		}
	};
	// 当鼠标按下时触发
	pt.dragNodeMouseDown=function(event){
		event=event||window.event;
		this._arrPrivate['dragobj'].startDrag=true;
		this._arrPrivate['dragobj'].dragX=event.clientX-this.getPageX(this._arrPrivate['dragobj']);// 鼠标点击位置距离左边的距离
		this._arrPrivate['dragobj'].dragY=event.clientY-this.getPageY(this._arrPrivate['dragobj']);// 鼠标点击位置距离顶部的距离
	};
	// 当鼠标移动时触发
	pt.dragNodeMouseMove=function(p_bolCrossBody,event){
		if(this._arrPrivate['dragobj'].startDrag){
			event=event||window.event;
			if(1==event.button||0===event.button){
				if(p_bolCrossBody){
					this.setPosX(this._arrPrivate['dragobj'],Math.min(this.getWindowWidth()-this._arrPrivate['dragobj'].offsetWidth,Math.max(0,event.clientX-this._arrPrivate['dragobj'].dragX)));
					this.setPosY(this._arrPrivate['dragobj'],Math.min(this.getWindowHeight()-this._arrPrivate['dragobj'].offsetHeight,Math.max(0,event.clientY-this._arrPrivate['dragobj'].dragY)));
				}else{
					this.setPosX(this._arrPrivate['dragobj'],Math.min(this.getBodyWidth()-this._arrPrivate['dragobj'].offsetWidth,Math.max(0,event.clientX-this._arrPrivate['dragobj'].dragX)));
					this.setPosY(this._arrPrivate['dragobj'],Math.min(this.getBodyHeight()-this._arrPrivate['dragobj'].offsetHeight,Math.max(0,event.clientY-this._arrPrivate['dragobj'].dragY)));
				}
			}
		}
	};
	// 当鼠标松开时触发
	pt.dragNodeMouseUp=function(){
		this._arrPrivate['dragobj'].objX=this._arrPrivate['dragobj'].objY=0;
		this._arrPrivate['dragobj'].startDrag=false;
	};
	// 全屏遮盖层
	pt.startCover=function(p_jsnPara){
		p_jsnPara=p_jsnPara instanceof Object?p_jsnPara:{};
		var bolHaveDiv=false;// 防止多次创建层
		if(this._arrPrivate['divCover']){
			bolHaveDiv=true;
		}else{
			this._arrPrivate['divCover']=document.createElement('div');
			this._arrPrivate['divCover'].style.backgroundColor=p_jsnPara.coverbg||'darkgray';
			this._arrPrivate['divCover'].style.zIndex=p_jsnPara?p_jsnPara.zIndex||10:10;// 必要属性
			this.setOpacity(this._arrPrivate['divCover'],30);
			this._arrPrivate['ifrCover']=document.createElement('iframe');
			this._arrPrivate['ifrCover'].style.backgroundColor=p_jsnPara.coverbg||'darkgray';
			this._arrPrivate['ifrCover'].style.zIndex=this._arrPrivate['divCover'].style.zIndex-1;// 必要属性
			this.setOpacity(this._arrPrivate['ifrCover'],30);
		}
		this.setProps(this._arrPrivate['divCover'],{
			style:{
				width:this.getBodyWidth()+'px',
				height:Math.max(this.getBodyHeight(),this.getWindowHeight())+'px',
				visibility:'visible',
				border:'0px',
				position:'absolute',
				display:'block',
				left:'0px',
				top:'0px'
			}
		});
		this.setProps(this._arrPrivate['ifrCover'],{
			style:{
				width:this.getBodyWidth()+'px',
				height:Math.max(this.getBodyHeight(),this.getWindowHeight())+'px',
				visibility:'visible',
				border:'0px',
				position:'absolute',
				display:'block',
				left:'0px',
				top:'0px'
			}
		});
		// 最后添加对象，防止getBodyHeight时计算错误
		if(!bolHaveDiv){
			this.appendEle(document.body,this._arrPrivate['divCover']);
			this.appendEle(document.body,this._arrPrivate['ifrCover']);
		}
		this.bindEvent(window,'resize',this._arrPrivate['divCover'].coverfunc=this.getFunc(this,this.startCover,p_jsnPara));
		if('ajax'==p_jsnPara.closeobj){
			this._arrPrivate['divCover'].lastcloseobj='ajax';
			this._arrPrivate['ifrCover'].lastcloseobj='ajax';
		}else{
			this.bindEvent(this._arrPrivate['divCover'].lastcloseobj=p_jsnPara.closeobj||this._arrPrivate['divCover'],this._arrPrivate['divCover'].lastcloseaction=p_jsnPara.closeaction||'click',
					this._arrPrivate['divCover'].lastclosefunc=this.getFunc(this,this.endCover));
			this.bindEvent(this._arrPrivate['ifrCover'].lastcloseobj=p_jsnPara.closeobj||this._arrPrivate['ifrCover'],this._arrPrivate['ifrCover'].lastcloseaction=p_jsnPara.closeaction||'click',
					this._arrPrivate['ifrCover'].lastclosefunc=this.getFunc(this,this.endCover));
		}
	};
	// 关闭遮盖层
	pt.endCover=function(){
		if(this._arrPrivate['divCover']){
			this.setProps(this._arrPrivate['divCover'],{
				style:{
					width:'0px',
					height:'0px',
					visibility:'hidden',
					display:'none'
				}
			});
			this.setProps(this._arrPrivate['ifrCover'],{
				style:{
					width:'0px',
					height:'0px',
					visibility:'hidden',
					display:'none'
				}
			});
			this.removeEvent(window,'resize',this._arrPrivate['divCover'].coverfunc);
			if('ajax'!=this._arrPrivate['divCover'].lastcloseobj){
				this.removeEvent(this._arrPrivate['divCover'].lastcloseobj,this._arrPrivate['divCover'].lastcloseaction,this._arrPrivate['divCover'].lastclosefunc);
				this.removeEvent(this._arrPrivate['ifrCover'].lastcloseobj,this._arrPrivate['ifrCover'].lastcloseaction,this._arrPrivate['ifrCover'].lastclosefunc);
			}
		}
	};
	/* 对象动画 end */
	/* DOM 对象位置相关方法 start */
	// 判断是否非静态定位
	pt.isNonStaticPos=function(p_objEle){
		var strPosition=p_objEle.style.position.toLowerCase();
		return 'relative'==strPosition||'absolute'==strPosition||('fixed'==strPosition&&!(this.browser.msie&&this.browser.version<'7.0'));
	};
	// 获取最近的非static定位的父元素
	pt.nearestNonStaticPosPareNode=function(p_objEle){
		while((p_objEle=p_objEle.offsetParent)&&!this.isNonStaticPos(p_objEle)){
		}
		return p_objEle;
	};
	// 获取位置
	pt.getPos=function(p_objEle,p_bolIsNonStatic){
		var intLeft=0,intTop=0;
		while(p_objEle){
			intLeft+=p_objEle.offsetLeft;
			intTop+=p_objEle.offsetTop;
			p_objEle=p_objEle.offsetParent;
			if(p_bolIsNonStatic&&this.isNonStaticPos(p_objEle)){
				break;
			}
		}
		return {
			left:intLeft,
			top:intTop
		};
	};
	// 鼠标定位
	pt.fallowMouse=function(p_objEvt,p_objEle,p_objDir){
		p_objEvt=p_objEvt||window.event;
		if(!this.isNonStaticPos(p_objEle)||!p_objEvt){// 非静态定位left
			// top定位是无效的,或者不是event对象
			return false;
		}
		p_objDir=p_objDir||{
			left:false,
			top:false
		};
		var ex=p_objEvt.clientX;// 鼠标相对于客户端的位置
		var ey=p_objEvt.clientY;// 鼠标相对于客户端的位置
		var bl=this.getScrollX();// 横向滚动位置
		var bt=this.getScrollY();// 竖向滚动位置
		var bw=this.getWindowWidth();// 视口宽度
		var bh=this.getWindowHeight();// 视口高度
		var ow=p_objEle.offsetWidth;// 对象宽度
		var oh=p_objEle.offsetHeight;// 对象高度

		var ol=p_objDir.left?(ex-ow<bl?ex+bl:ex+bl-ow):(ex+ow>bw?ex+bl-ow:ex+bl);
		ol=Math.max(0,bl,ol);
		var ot=p_objDir.top?(ey-oh<bt?ey+bt:ey+bt-oh):(ey+oh>bh?ey+bt-oh:ey+bt);
		ot=Math.max(0,bt,ot);

		var pNode=this.nearestNonStaticPosPareNode(p_objEle);
		if(pNode){
			var pos=this.getPos(pNode);
			ol-=pos.left;
			ot-=pos.top;
		}
		this.setPosX(p_objEle,ol);
		this.setPosY(p_objEle,ot);
	};
	// 屏幕中央定位
	pt.setCenter=function(p_objEle){
		var intEleWidth=p_objEle.offsetWidth;// 对象宽
		var intEleHeight=p_objEle.offsetHeight;// 对象高
		var intBodyScrollWidth=this.getScrollX();// 滚动宽
		var intBodyScrollHeight=this.getScrollY();// 滚动高
		var intWindowWidth=this.getWindowWidth();// 整体宽
		var intWindowHeight=this.getWindowHeight();// 整体高
		var intEleLeft=intBodyScrollWidth+Math.floor((intWindowWidth-intEleWidth)/2);
		intEleLeft=Math.max(intBodyScrollWidth,intEleLeft);
		var intEleTop=intBodyScrollHeight+Math.floor((intWindowHeight-intEleHeight)/2);
		intEleTop=Math.max(intBodyScrollHeight,intEleTop);
		this.setPosX(p_objEle,intEleLeft);
		this.setPosY(p_objEle,intEleTop);
	};
	/* DOM 对象位置相关方法 end */
	/* 对象事件监听相关方法 start */
	// 事件对象
	pt.eventTarget=function(p_objEvt){
		var p_objEvt=p_objEvt||window.event;
		return p_objEvt.target||p_objEvt.srcElement;
	};
	// 事件绑定
	pt.bindEvent=function(p_objEle,p_strDo,p_objFunc){
		var p_strDo2='on'+p_strDo;
		if(p_objEle.addEventListener){// ff opera
			p_objEle.addEventListener(p_strDo,p_objFunc,false);
		}else if(p_objEle.attachEvent){// ie
			p_objEle.attachEvent(p_strDo2,p_objFunc);
		}else{
			p_objEle[p_strDo2]=p_objFunc;
		}
	};
	// 事件移除
	pt.removeEvent=function(p_objEle,p_strDo,p_objFunc){
		var p_strDo2='on'+p_strDo;
		if(p_objEle.removeEventListener){// ff opera
			p_objEle.removeEventListener(p_strDo,p_objFunc,false);
		}else if(p_objEle.detachEvent){// ie
			p_objEle.detachEvent(p_strDo2,p_objFunc);
		}else{
			p_objEle[p_strDo2]=null;
		}
	};
	// 阻止事件冒泡
	pt.stopBubble=function(p_objEvt){
		if(p_objEvt&&p_objEvt.stopPropagation){// w3c
			p_objEvt.stopPropagation();
		}else{// ie
			window.event.cancelBubble=true;
		}
	};
	// 阻止默认事件
	pt.stopDefault=function(p_objEvt){
		if(p_objEvt&&p_objEvt.preventDefault){// w3c
			p_objEvt.preventDefault();
		}else{// ie
			window.event.returnValue=false;
		}
		return false;
	};
	/* 对象事件监听相关方法 end */
	/* ajax函数 start */
	// http协议是否接受成功
	pt.httpSucc=function(p_objXHttp){
		try{// 兼容文本协议
			return !p_objXHttp.status&&window.location.protocol=='file:'||(p_objXHttp.status>=200&&p_objXHttp.status<300)||p_objXHttp.status==304||true===this.browser.safari
					&&typeof p_objXHttp.status===undefined;
		}catch(e){
		}
		return false;
	};
	// 解析返回结果
	pt.httpData=function(p_objXHttp,p_strType){
		var ct=p_objXHttp.getResponseHeader('Content-type');
		return 'XML'==p_strType?p_objXHttp.responseXML:p_objXHttp.responseText;
	};
	// 发送ajax请求
	pt.ajax=function(p_mixOpt){
		p_mixOpt={
			type:p_mixOpt.type?p_mixOpt.type.toUpperCase():'GET',
			formtype:p_mixOpt.formtype||'application/x-www-form-urlencoded',// multipart/form-data,text/xml
			url:p_mixOpt.url||'',
			timeout:p_mixOpt.timeout||1000,
			onComplete:p_mixOpt.onComplete||function(){
			},
			onError:p_mixOpt.onError||function(){
			},
			onSuccess:p_mixOpt.onSuccess||function(){
			},
			onTimeout:p_mixOpt.onTimeout||function(){
			},
			senddata:p_mixOpt.senddata||'',
			charset:p_mixOpt.charset||'utf-8'
		};
		if(!this._arrPrivate['XHttp']){
			if(typeof (window.XMLHttpRequest)===undefined){
				window.XMLHttpRequest=function(){
					return new window.ActiveXObject(this._arrPrivate['strUserAgent'].indexOf('MSIE 5')>=0?'Microsoft.XMLHTTP':'Msxml2.XMLHTTP');
				};
			}
		}
		this._arrPrivate['XHttp']=new window.XMLHttpRequest();
		this._arrPrivate['XHttp'].open(p_mixOpt.type,p_mixOpt.url,true);
		if('POST'==p_mixOpt.type){
			this._arrPrivate['XHttp'].setRequestHeader('Content-Type',p_mixOpt.formtype);
		}
		this._arrPrivate['XHttpRequestDone']=false;
		if('unlimit'!=p_mixOpt.timeout){
			setTimeout(this.getFunc(this,this.setXHttpTimeout,p_mixOpt),p_mixOpt.timeout);
		}
		this._arrPrivate['XHttp'].onreadystatechange=this.getFunc(this,this.onXHttpStateChange,p_mixOpt);
		this._arrPrivate['XHttp'].send(p_mixOpt.senddata);
	};
	// XHttp超时设置函数
	pt.setXHttpTimeout=function(p_mixOpt){
		this._arrPrivate['XHttpRequestDone']=true;
		if(null!=this._arrPrivate['XHttp']){
			this.getFunc(this,p_mixOpt.onTimeout)();
		}
	};
	// XHttp状态改变函数
	pt.onXHttpStateChange=function(p_mixOpt){
		if(this._arrPrivate['XHttp'].readyState==4&&!this._arrPrivate['XHttpRequestDone']){
			if(this.httpSucc(this._arrPrivate['XHttp'])){
				this.getFunc(this,p_mixOpt.onSuccess,this.httpData(this._arrPrivate['XHttp']))();
			}else{
				this.getFunc(this,p_mixOpt.onError)();
			}
			this.getFunc(this,p_mixOpt.onComplete)();
			this._arrPrivate['XHttp']=null;
		}
	};
	/* ajax函数 end */
	/* 用户体验增强函数 start */
	// 渲染表单
	pt.renderForm=function(p_objForm){
		var arrObjs=p_objForm.getElementsByTagName('input');
		for( var i=0;i<arrObjs.length;++i){
			if('text'==arrObjs[i].type){
				var thisobj=arrObjs[i];
				if(arrObjs[i].getAttribute('nullvalue')){
					if(''==thisobj.value){
						thisobj.value=thisobj.getAttribute('nullvalue');
					}
					this.bindEvent(arrObjs[i],'click',function(){
						if(thisobj.value==thisobj.getAttribute('nullvalue')){
							thisobj.value='';
						}
					});// 添加点击监听函数
					this.bindEvent(arrObjs[i],'blur',function(){
						if(''===thisobj.value){
							thisobj.value=thisobj.getAttribute('nullvalue');
						}
					});// 添加失焦监听函数
				}
			}
		}
		this.bindEvent(p_objForm,'submit',function(){
			var arrObjs=p_objForm.getElementsByTagName('input');
			for( var i=0;i<arrObjs.length;++i){
				if('text'==arrObjs[i].type){
					if(arrObjs[i].value==arrObjs[i].getAttribute('nullvalue')){
						arrObjs[i].value='';
					}// 清除默认值
				}
			}
		});
	};
	pt.renderTable=function(p_objTbl){

	};
	/* 用户体验增强函数 end */
})();

var clsBase=new Base();